package org.zs.asp05;


import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class ApsLog {
    /**
    * 不推荐： 没有共享参数，建议单独使用其他通知，因为环绕通知的语法格式比较复杂！！！
    * 推荐： 不同的通知存在数据共享 例如：计算消耗时间
     * 使用@Around注解表明环绕通知方法
    * */
    @Around("execution(* org..aop05..Impl.*.*(..))")
    public Object manageTransaction(ProceedingJoinPoint joinPoint) {
      Object[] args = joinPoint.getArgs();
      Object targetMethodReturnValue = null;
      long start = System.currentTimeMillis();
      try{
        System.out.println("方法进来了！！！");
          targetMethodReturnValue = joinPoint.proceed();
      }catch (Throwable e) {
          System.out.println("方法报错了！！！");
    //          throw new RuntimeException(e);
      }finally{
          long end = System.currentTimeMillis();
          System.out.println("方法完毕了！！ 耗时：" + (end - start));
      }


    return targetMethodReturnValue;
    }
}
